﻿/***************************************************************
 * 开发人员：网魂小兵@http://www.mozlite.com
 * 
 * 网站配置数据库提供者基类。
 * 
 * 最后修改：2011-10-29
 * ************************************************************/
namespace Mozlite.Common.Configuration
{
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Mozlite.Data;
    using System.Data.Common;

    /// <summary>
    /// 网站配置数据库提供者基类。
    /// </summary>
    public abstract class ConfigurationDataProvider : ProviderBase<ConfigurationDataProvider>
    {
        /// <summary>
        /// 初始化类<see cref="T:Mozlite.Common.Configuration.ConfigurationDataProvider"/>。
        /// </summary>
        /// <param name="factory">数据库提供者工厂实例。</param>
        protected ConfigurationDataProvider(DbProviderFactory factory) : base(factory) { }

        #region sites
        /// <summary>
        /// 新建一个网站实例。
        /// </summary>
        /// <param name="site">网站实例。</param>
        /// <returns>返回创建网站状态。</returns>
        public abstract CreateSiteStatus SaveSite(SiteDomain site);
        /// <summary>
        /// 删除网站实例，和网站设置信息无关。
        /// </summary>
        /// <param name="siteID">网站域名ID。</param>
        /// <returns>返回是否删除成功。</returns>
        public abstract bool DeleteSite(int siteID);
        /// <summary>
        /// 加载所有网站信息。
        /// </summary>
        /// <returns>返回所有网站信息列表。</returns>
        public abstract Dictionary<string, SiteDomain> LoadSites();
        /// <summary>
        /// 获取当前网站实例。
        /// </summary>
        /// <param name="siteID">网站ID。</param>
        /// <returns>返回网站实例。</returns>
        public abstract SiteDomain GetSite(int siteID);
        /// <summary>
        /// 设置默认网站地址。
        /// </summary>
        /// <param name="siteID">网站ID。</param>
        /// <returns>返回设置是否正确。</returns>
        public abstract bool SetSiteDefault(int siteID);
        #endregion

        #region sitesettings
        /// <summary>
        /// 保存网站设置。
        /// </summary>
        /// <param name="settings">网站设置实例对象。</param>
        /// <returns>返回是否保存成功。</returns>
        public abstract bool SaveSiteSettings(SiteSettings settings);
        /// <summary>
        /// 返回网站设置实例对象。
        /// </summary>
        /// <param name="dotLowerDomain">域名前面加“.”小写字符串。</param>
        /// <returns>返回网站设置实例对象。</returns>
        public abstract SiteSettings GetSiteSettings(string dotLowerDomain);
        /// <summary>
        /// 载入默认网站设置实例对象。
        /// </summary>
        /// <returns>返回网站设置实例对象。</returns>
        public abstract SiteSettings GetDefaultSettings();
        #endregion

        #region routes
        /// <summary>
        /// 添加或更新网站路由实例对象。
        /// </summary>
        /// <param name="route">路由实例对象。</param>
        /// <returns>返回更新结果。</returns>
        public abstract bool SaveRoute(Route route);
        /// <summary>
        /// 获取网站路由实例对象。
        /// </summary>
        /// <param name="routeID">路由ID。</param>
        /// <returns>返回网站路由实例对象。</returns>
        public abstract Route GetRoute(int routeID);
        /// <summary>
        /// 删除网站路由。
        /// </summary>
        /// <param name="routeIDs">网站路由ID集合，以“,”分割。</param>
        /// <returns>返回删除结果。</returns>
        public abstract bool DeleteRoutes(string routeIDs);
        /// <summary>
        /// 载入网站路由列表。
        /// 第一主键：区域字符串。
        /// 第二主键：路由名称字符串。
        /// </summary>
        /// <returns>返回网站路由列表。</returns>
        public abstract Dictionary<string, Dictionary<string, Route>> LoadRoutes();
        #endregion
    }
}
